package web

import (
	"bytes"
	"context"
	"html/template"
)

type TemplateEngine interface {
	Render(ctx context.Context, tplName string, data any) ([]byte, error)
}

// 与框架核心耦合
// 先是挂到 server 上， 通过 server 又挂到了 context 上
type GoTemplateEngine struct {
	T *template.Template
}

func (g *GoTemplateEngine) Render(ctx context.Context, tplName string, data any) ([]byte, error) {
	var bs bytes.Buffer
	err := g.T.ExecuteTemplate(&bs, tplName, data)
	return bs.Bytes(), err
}
